package compilador.semantico.comando;

import compilador.Command;
import compilador.CommandException;
import compilador.semantico.Atributo;
import compilador.semantico.GerenciadorDeContexto;
import compilador.semantico.SemanticException;
import compilador.semantico.TabelaSemantica.TiposPrimitivo;

public class VerificaOperacaoNumericaCommand implements Command {

	@Override
	public void run(String... args) throws CommandException {
		GerenciadorDeContexto pilha = GerenciadorDeContexto.getInstance();
		String tipo1 = pilha.top().getTipo();
		pilha.remove();
		String tipo2 = pilha.top().getTipo();
		
		if((tipo1.equals(TiposPrimitivo.Integer.name()) || tipo1.equals(TiposPrimitivo.Float.name())) && 
				(tipo2.equals(TiposPrimitivo.Integer.name()) || tipo2.equals(TiposPrimitivo.Float.name()))) {
			if (tipo1.equals(TiposPrimitivo.Float.name()) || tipo2.equals(TiposPrimitivo.Float.name())) {
				pilha.push(new Atributo(TiposPrimitivo.Float.name()));
			} else {
				pilha.push(new Atributo(TiposPrimitivo.Integer.name()));
			}
		} else {
			throw new SemanticException("Operacao numerica invalida: um dos operadores nao eh numero.");
		}

	}

}
